]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dateMenu: Only use nearest city when appropriate
authorFlorian Müllner <fmuellner@gnome.org>
Sat, 28 Mar 2020 01:54:14 +0000 (02:54 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Sat, 28 Mar 2020 16:24:03 +0000 (16:24 +0000)
Since commit 784c0b7e4 we use the name of the nearest city rather
than the weather station, as the latter tend to have unwieldy
and weird names.

However the nearest city may not be that near after all, in which
case the result is again surprising.

Address this by not using the nearest city name unconditionally, but
only if it appears in the station name.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2468

js/ui/dateMenu.js

index a10c6fcf46ef53374fcfd8824176c82acd4d96d1..ca9611f2de0364747b5647ab8030751ca03ddfa5 100644 (file)
@@ -397,6 +397,20 @@ class WeatherSection extends St.Button {
         layout.attach(label, 0, 0, 1, 1);
     }
 
+    _findBestLocationName(loc) {
+        const locName = loc.get_name();
+
+        if (loc.get_level() === GWeather.LocationLevel.CITY ||
+            !loc.has_coords())
+            return locName;
+
+        const world = GWeather.Location.get_world();
+        const city = world.find_nearest_city(...loc.get_coords());
+        const cityName = city.get_name();
+
+        return locName.includes(cityName) ? cityName : locName;
+    }
+
     _updateForecasts() {
         this._forecastGrid.destroy_all_children();
 
@@ -405,13 +419,8 @@ class WeatherSection extends St.Button {
             return;
         }
 
-        let info = this._weatherClient.info;
-        let loc = info.get_location();
-        if (loc.get_level() !== GWeather.LocationLevel.CITY && loc.has_coords()) {
-            let world = GWeather.Location.get_world();
-            loc = world.find_nearest_city(...loc.get_coords());
-        }
-        this._titleLocation.text = loc.get_name();
+        const { info } = this._weatherClient;
+        this._titleLocation.text = this._findBestLocationName(info.location);
 
         if (this._weatherClient.loading) {
             this._setStatusLabel(_("Loading…"));